package base.factory;

import base.entity.regitem.RegItem;

/**
 * 改进后的工厂模式，一个工厂对应一个item，每个工厂负责创建diritem和fileitem
 * 如RegItemFactory，负责RegItem实例的创建，负责创建DirRegItem和FileRegItem
 * @Author: x1aolone
 * @Date: 2019/9/28 15:19
 */
public interface Factory<T> {


//    /**
//     * 通过长度为8的byte[]来构造子类
//     * @param bytes
//     * @return 通过bytes构造得到的子类
//     */
//    RegItem newInstance(byte[] bytes);
//
//    /**
//     * 通过名字、类型、属性、起始盘块、长度来构造子类
//     * @param name 名字
//     * @param type 类型
//     * @param property 属性
//     * @param beginFatNum 起始盘块
//     * @param length 畅快
//     * @return 通过五个属性构造得到的子类
//     */
//    RegItem newInstance(String name, String type, byte property, byte beginFatNum, byte length);

    /**
     * 通过长度为8的byte[]来构造子类
     * @param bytes
     * @return 通过bytes构造得到的子类
     */
    T newDirInstance(byte[] bytes);

    /**
     * 通过名字、属性、起始盘块来构造子类
     * @param name 名字
     * @param property 属性
     * @param beginFatNum 起始盘块
     * @return
     */
    T newDirInstance(String name, byte property, byte beginFatNum);

    /**
     * 通过长度为8的byte[]来构造子类
     * @param bytes
     * @return 通过bytes构造得到的子类
     */
    T newFileInstance(byte[] bytes);

    /**
     * 通过名字、类型、属性、起始盘块、长度来构造子类
     * @param name 名字
     * @param type 类型
     * @param property 属性
     * @param beginFatNum 起始盘块
     * @param length 长度
     * @return
     */
    T newFileInstance(String name, String type, byte property, byte beginFatNum, byte length);







}
